package com.hfy.music.listener;

import com.alibaba.fastjson.JSON;
import com.hfy.model.Bo.SendUserNoticeBo;
import com.hfy.music.mapper.NoticeMapper;
import com.rabbitmq.client.Channel;
import constants.RabbitConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @ author 韩
 * time: 2024/9/23 10:48
 */

@Component
@Slf4j
public class SendNoticeListener {

    @Autowired
    private NoticeMapper noticeMapper;



    @RabbitListener(queues = { RabbitConstants.COMMON_SEND_CAPTCHA_MAIL_QUEUE })
    public void listenSendUserNoticeQueue(String msg, Message message, Channel channel) {
        // 把消息转换为java对象
        SendUserNoticeBo bo = JSON.parseObject(msg, SendUserNoticeBo.class);
        // 然后执行消息发送操作，对数据库进行操作
        // 列表显示的数据应该是动态的，即关联性极强的，可以通过外键约定实现，但是在分布式架构下不适用外键，就要使用业务来实现强关联的效果
        // 这样一来就不能再去创建数据库进行消息详细信息的持久化了，以用户id，音乐id，评论id的方式展现，

        // 开始操作sql
        noticeMapper.InsertNotice(bo.getAccount(), bo.getCommentId(), bo.getDoCommentId(), bo.getMusicId(), bo.getType());

        // 展示消息时，如果获取用户不到的时候，显示该用户已注销，如果获取不到评论时，显示该评论已经删除


    }
}
